import * as svgCaptcha from 'svg-captcha'

export class SvgUtil {
    // https://www.npmjs.com/package/svg-captcha
    // 生成svg验证码
    public static createCaptcha(options = {}) {
        const {
            mathMin= 1,
            mathMax= 9,
            width= 110,
            height= 35,
            noise = 2,
            fontSize= 50,
            color = true,
            // background= '#f3af22',
        } = options as any;
        const { text, data } = svgCaptcha.create({ color, noise, mathMin, mathMax, width, height, fontSize });
        return {
            text: text,
            data: SvgUtil.toBase64(data)
        }
    }

    // 生成svg验证码
    public static createMathExpr(options = {}) {
        const {
            mathMin= 1,
            mathMax= 9,
            width= 110,
            height= 35,
            fontSize= 50,
            ignoreChars= '0oO1ilI', // 验证码字符中排除 0o1i
            noise = 2, // 干扰线条的数量
            color = true, // 验证码的字符是否有颜色，默认没有，如果设定了背景，则默认有
            // background= '#f3af22',
        } = options as any;
        const { text, data } = svgCaptcha.createMathExpr({ noise, color, ignoreChars, mathMin, mathMax, width, height, fontSize });
        return {
            text: text,
            data: SvgUtil.toBase64(data)
        }
    }
    /**
     * SVG 转 Base64
     * @param svg SVG字符串
     * @returns Base64字符串
     */
    static toBase64(svg: string): string {
        // 转换为 Base64
        const base64 = Buffer.from(svg).toString('base64');
        // 返回带 Data URI 的 Base64
        return `data:image/svg+xml;base64,${base64}`;
    }

    /**
     * Base64 转 SVG
     * @param base64 Base64字符串
     * @returns SVG字符串
     */
    static fromBase64(base64: string): string {
        // 移除 Data URI 前缀
        const base64Data = base64.replace(/^data:image\/svg\+xml;base64,/, '');
        // 转换回 SVG
        return Buffer.from(base64Data, 'base64').toString('utf-8');
    }
}